FO
pedido

Recompensas por tempo online

Por FoxyLolz, 08 de jan. de 2016 em Scripts

resolvido
script
22
7.1k
SkullsS
08 de janeiro de 2016 às 21:11

​sim, é o v. Se o código realmente foi testado e funcionou, eu não sei dizer porquê.

 

getPlayersOnline() retorna tabela de players online na forma

{uid1, uid2, uid3}

 

vc ta querendo dar os itens via uid na função pois doPlayerAddItem requer um uid no parâmetro, logo vc quer o value da tabela, não o índice.

 

A diferença entre pairs e ipairs é que ambas são funções de busca porém pairs itera em pares sequenciais (i = i + 1) enquanto que ipairs busca o próximo elemento diferente de nil.

 

Há casos em que pairs não irá funcionar e casos que ipairs não irá funcionar. Portanto é bom conhecer os dois usos e testar sempre.

pairs e ipairs não retornam informações diferentes, quem dita isso é o return da função, pairs e ipairs são meras funções pra percorrer a tabela retornada.

 

Leia isso daqui tb: http://www.lua.org/pil/7.3.html

Bom, se realmente retornar uma lista de ids, eu estava certo. Mas se ele retorna uma lista de nomes indexada por ids, o código dele faz sentido. Vai depender do return do getPlayersOnline(). Valeu pela explicação, deixou mais claro ainda pra mim.

 

E, pelo que entendi da leitura, a diferença entre o ipairs e o pairs é que o ipairs é em ordem e o pairs aleatório, assim sendo, no pairs você consegue fazer a leitura de tabelas com a indexação sem ordem (como tab = { [123] = "Lucas", [16123] = "Goulart"}, o que não é possível pelo ipairs, (é possível, mas ele não retorna esses indexes aleatórios, ele vai retornar o número do elemento) correto?

Abraços

Editado Janeiro 8 por Skulls

Night WolfN
08 de janeiro de 2016 às 22:39

@@Skulls então, não é aleatório, ele segue a ordem do next. Isso que vc falou de indexação fora de ordem está correto, mas tem casos em que ipairs não funcionaria como tabelas contendo nil pois o next iria retornar falso e cancelar (semelhante à um break)

CaronteC
08 de janeiro de 2016 às 23:01

,

Editado Janeiro 8 por Caronte

SkullsS
09 de janeiro de 2016 às 09:23

Segundo o lottery.lua do baiak 10.10, o wolf tem razão:

 

for i, tid in ipairs(getPlayersOnline()) do
list = tid
end
O id, nesse caso, é o conteúdo das células da tabela retornada por getPlayersOnline() (ele usa ipairs, mas não vem ao caso)
3 semanas depois...
DanihcvD
25 de janeiro de 2016 às 02:34

Tópico movido para dúvidas / pedidos resolvidos.

1 ano depois...
DarciioD
02 de maio de 2017 às 11:33

Não funciona

 

3 anos depois...
JosegvbJ
01 de maio de 2020 às 01:25

primeiramente desculpa por revives o topico mais ja tenti mil coisas e nao achei a solucao...

to tendo o siguente error:

 

[01/05/2020 00:18:35] [Error - LuaScriptInterface::loadFile] data/globalevents/scripts/recompensaonline.lua:2: unexpected symbol near '{'
[01/05/2020 00:18:35] [Warning - Event::loadScript] Cannot load script (data/globalevents/scripts/recompensaonline.lua)
[01/05/2020 00:18:35] data/globalevents/scripts/recompensaonline.lua:2: unexpected symbol near '{'

function onThink() 
	local tab {-- Siga o exemplo: 
					--[hora] = {[itemid] = quantidade},
						[1] = {[15556] = 100, [15556] = 100, [15590] = 100},
						[2] = {[15556] = 100, [15556] = 100, [15590] = 100, [2145] = 1},
						[3] = {[15556] = 100, [15556] = 100, [15590] = 100},
						[4] = {[15556] = 100, [15556] = 100, [15590] = 100, [2145] = 1},
						[5] = {[15556] = 100, [15556] = 100, [15590] = 100, [12227] = 1},
						[6] = {[15556] = 100, [15556] = 100, [15590] = 100},
				}
	
	for k, v in pairs(getOnlinePlayers()) do
		for i = #tab, 0 in pairs(tab) do  -- 1 = hora inicial para receber, caso mudar acima, mudar aqui também
			if tab[i] and (os.time() - getCreatureStorage(cid, 151091) / 360000) > i then 
				for item, count in pairs(tab[i])
					doPlayerAddItem(k, item, count)
				end
				if tab[i] == tab[#tab] and (os.time() - getCreatureStorage(cid, 151091) / 360000) > i then 
					doCreatureSetStorage(cid, 151091, 0)
				end
				break
				return true
			end
		end
	end	

outra duvida, fizeram alguma coisa pra ele nao resetar qndo o player morre?

 

PD: Eu cloquei os items do meu server mais colocando aquele script postado aqui msm, tava dando o msm error entao nao foi error ao adicionar os items na tabelas.

Editado Maio 1 por Josegvb